// middleware/setup.go
package middleware

import (
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"gorm.io/gorm"

	"go-admin-system/config"
)

// 声明全局变量（修改变量名避免冲突）
var GlobalAuthMiddleware gin.HandlerFunc

// SetupMiddleware 注册应用所需的所有中间件
func SetupMiddleware(r *gin.Engine, db *gorm.DB, logger *zap.Logger, cfg *config.Config) {
	// 设置信任的代理
	r.SetTrustedProxies([]string{"127.0.0.1"})

	// 注册Zap日志中间件
	r.Use(Logger(logger))

	// 注册恢复中间件
	r.Use(gin.Recovery())

	// 注册错误处理中间件
	r.Use(ErrorHandler(logger))

	// 注册CORS中间件
	r.Use(CORSMiddleware())

	// 注册数据库连接中间件
	r.Use(DatabaseMiddleware(db))

	// 注册JWT认证中间件
	authConfig := AuthConfig{
		Logger:    logger,
		SecretKey: cfg.JWTSecret,
	}

	// 将认证中间件保存到全局变量
	GlobalAuthMiddleware = AuthMiddleware(authConfig)
}
